package com.cn.wanxi.service.impl;

import com.cn.wanxi.dao.NavDaoa;
import com.cn.wanxi.model.NavModel;
import com.cn.wanxi.service.NavService;
import com.cn.wanxi.util.IOTool;
import com.cn.wanxi.util.PathEnum;
import com.cn.wanxi.util.PathNote;
import com.cn.wanxi.util.Tool;

import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class NavServiceImpl implements NavService {
    //    平时所说的不变，是指不通过代码改变(赋值）
//    如果我们将这些变量直接放到程序里，这个值（魔法值）
//    魔法值不能单独存在，我们需要将这个改变
//    常量
//    private static final String PATH = "E:\\wanxi\\step-3\\canyin03-0524\\web\\note";
//    private static final String FILE_NAME = "nav.txt";
//    private static final String SEPARATOR = "\n";

    /**
     * 1.创建文件
     * 2.封装导航数据到集合
     * 3.写入数据
     * 4.读取数据
     * 5.封装集合
     *
     * @return
     */
    @Override
    public List<NavModel> getNavModelList() {
//        1.创建文件

//       因为创建文件和公司信息的代码一致，所以将代码提取到工具类里面
//        因为工具类里面多数 情况下都是提供给外面的接口调用，
//        所以做了一个私有无参数的构造方法，目的是不能创建对象实例化，提升效率
//        当对象实例化时，会占用时间，会占用内存；经常用到的工具类，
//        如果是很少用这个工具类，则不需要创建私有的构造方法，直接实例化调用
//        File file = IOTool.createNote(PathEnum.PATH.getPath(), PathEnum.FILE_NAME_NAV.getPath());
//        2.封装导航数据到集合
        List<String> list = setDaoData();
//        3.写入数据
        IOTool.writeData(PathEnum.FILE_NAME_NAV.getPath(), list);
//        4.读取数据
        String result = IOTool.readData();
//        5.封装集合

        return setList(result);
    }

    private List<NavModel> setList(String result) {
        System.out.println(result);
        String[] results = result.split(PathEnum.SEPARATOR.getPath());
//        將字符串转换为数组
        String title = results[1];
//        replace有一个返回值，我们需要有一个容器接收
        title = Tool.replace(title);
//        String href = results[0];
//        href = Tool.replace(href);
        String href = Tool.replace(results[0]);
        String[] titles = title.split(",");
        String[] hrefs = href.split(",");
//        这里得到的数据都有【】括号，所以需要去掉括号
//        replace替换
        List<NavModel> navModelList = new ArrayList<>();
        for (int i = 0; i < titles.length; i++) {
            NavModel model = new NavModel();
            model.setHref(hrefs[i]);
            model.setTitle(titles[i]);
            navModelList.add(model);
        }
        return navModelList;
    }

    /**
     * 封装数据到集合，然后便于写入数据
     *
     * @return
     */
    private List<String> setDaoData() {
        List<String> list = new ArrayList<>();
        NavDaoa navDaoa = new NavDaoa();
//        将数组变成字符串
        list.add(Arrays.toString(navDaoa.getHref()));
        list.add(Arrays.toString(navDaoa.getTitle()));
        return list;
    }

    public static void main(String[] args) {
        new NavServiceImpl().getNavModelList();
    }
}
